package gestorvideoclub;

import gestorvideoclub.jdbc.*;
import gestorvideoclub.util.*;

/**
 * Gestion de Videoclub.
 * Daremos de alta 1 solo videoclub.
 * A partir de él, derivarán las franquicias.
 *
 * @author Rafa Berral
 */
public class Videoclub {

    private String nombre;
    private String direccion;
    private String CIF;
    private String poblacion;
    private String provincia;
    private String CP;
    private int IdVideoclub;
    private String pais;
    private String telefono;

    public Videoclub(){
        
    }
    
    public Videoclub(String nom, String dir, String cif, String pob, String prov, String cp, String pais, String tel) {
        this.nombre = nom;
        this.direccion = dir;
        this.CIF = cif;
        this.poblacion = pob;
        this.provincia = prov;
        this.CP = cp;
        this.pais = pais;
        this.telefono = tel;
    }

    public int getIdVideoclub() {
        return IdVideoclub;
    }

    public String getCIF() {
        return CIF;
    }

    public String getCP() {
        return CP;
    }

    public String getDireccion() {
        return direccion;
    }

    public String getNombre() {
        return nombre;
    }

    public String getPais() {
        return pais;
    }

    public String getPoblacion() {
        return poblacion;
    }

    public String getProvincia() {
        return provincia;
    }

    public String getTelefono() {
        return telefono;
    }

    public void setCIF(String CIF) {
        this.CIF = CIF;
    }

    public void setIdVideoclub(int IdVideoclub) {
        this.IdVideoclub = IdVideoclub;
    }

    public void setCP(String CP) {
        this.CP = CP;
    }

    public void setDireccion(String direccion) {
        this.direccion = direccion;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    public void setPais(String pais) {
        this.pais = pais;
    }

    public void setPoblacion(String poblacion) {
        this.poblacion = poblacion;
    }

    public void setProvincia(String provincia) {
        this.provincia = provincia;
    }

    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }

    @Override
    public String toString() {
        return "|-| VIDEOCLUB |-| \nIdVideclub: " +IdVideoclub+ "nombre: " + nombre + "|| direccion: " + direccion + "|| CIF: " + CIF + "|| poblacion: " + poblacion + 
                "|| provincia:" + provincia + "|| CP:" + CP + "|| pais:" + pais + "|| telefono:" + telefono;
    }


    /**
     * Recoge los datos del videoclub para darlo de alta
     */
    public Videoclub recogeDatos(){
        Videoclub aux = new Videoclub();
        String nombre, dir, cif, pob, prov, pais, tel,cp;
        if(ExisteVideoclub()){
            System.out.println("Ya existe un Videoclub");
            aux = null;
        }
        else
        {
            System.out.println("----ALTA VIDEOCLUB----");
            System.out.println("Introduce CIF");
            cif = introduceDatos.introduceString();
            System.out.println("Introduce Nombre: ");
            nombre = introduceDatos.introduceString();
            System.out.println("Introduce Direccion: ");
            dir = introduceDatos.introduceString();
            System.out.println("Introduce Poblacion: ");
            pob = introduceDatos.introduceString();
            System.out.println("Introduce Provincia: ");
            prov = introduceDatos.introduceString();
            System.out.println("Introduce Codigo Postal: ");
            cp = introduceDatos.introduceString();
            System.out.println("Introduce Pais: ");
            pais = introduceDatos.introduceString();
            System.out.println("Introduce Telefono: ");
            tel = introduceDatos.introduceString();
            aux = new Videoclub(nombre,dir, cif, pob, prov, cp, pais, tel);
        }        
        return aux;
    }

    public void AltaVideoClub() {
        Videoclub videoclub = recogeDatos();
        if(videoclub!=null)
            VideoclubJDBC.altaVideoclub(videoclub);            
    }
    /*
     * modificacion de los atributos de Videoclub
     */
    public void ModificacionVideoclub() {
        if(ExisteVideoclub())
        {
            ConsultaVideoClub();//mostramos videoclub
            Videoclub video = VideoclubJDBC.consultaVideoclub();//guardamos videoclub actual, y modificamos sobre éste
            int op;
            String recoge;
            boolean listo=false;
            do
            {
                do
                {
                    System.out.println("---MODIFICACION VIDEOCLUB---");
                    System.out.println("1.- Domicilio");
                    System.out.println("2.- Poblacion");
                    System.out.println("3.- Codigo Postal");
                    System.out.println("4.- Provincia");
                    System.out.println("5.- Telefono");
                    System.out.println("6.- Pais");
                    System.out.println("7.- Salir");
                    System.out.println("Elige Opcion: ");
                    op = introduceDatos.introduceEntero();
                }while(op>8 || op<1);
                switch(op)
                {   
                    case 1: System.out.println("Introduce nuevo Domicilio");
                            video.setDireccion(introduceDatos.introduceString());break;
                    case 2: System.out.println("Introduce nuevo Poblacion");
                            video.setPoblacion(introduceDatos.introduceString());break;
                    case 3: System.out.println("Introduce nuevo Provincia");
                            video.setProvincia(introduceDatos.introduceString());break;
                    case 4: System.out.println("Introduce nuevo Codigo Postal");
                            video.setCP(introduceDatos.introduceString());break;
                    case 5: System.out.println("Introduce nuevo Telefono");
                            video.setTelefono(introduceDatos.introduceString());break;
                    case 6: System.out.println("Introduce nuevo Pais");
                            video.setPais(introduceDatos.introduceString());break;

                    default: System.out.println("Elige una opcion"); 
                }
                System.out.println("Desear seguir modificando alguna propiedad del producto actual(s/n): ");
                recoge = introduceDatos.introduceString();
                do {
                    if (recoge.compareToIgnoreCase("s") == 0 || recoge.compareToIgnoreCase("n") == 0) {
                        listo = true;
                    } else {
                        System.out.println("Introduzca s/n por favor: ");
                        recoge = introduceDatos.introduceString();
                    }
                } while (!listo);
            }while(recoge.compareToIgnoreCase("s") == 0);
            VideoclubJDBC.sobreescribeVideoclub(video, video.getIdVideoclub()); //le pasamos el videoclub y si ID    
        }
        else
        {
            System.out.println("No existe un Videoclub");
        }
     }

    /*
     * mostramos videoclub, si existe
     */
    public void ConsultaVideoClub(){
        Videoclub video = new Videoclub();
        try{
            video = VideoclubJDBC.consultaVideoclub();
            System.out.println(video);
        }catch(Exception e){
            System.out.println("No existe videoclub");
        }
    }
    /*
     * Metodo para saber si ya existe un videoclub. (solo tendremos dado de alta 1 videoclub)
     */
    public boolean ExisteVideoclub(){
        return VideoclubJDBC.compruebaExistenciaVideoclub();
    }

    /////////TODO LO QUE SIGUE ES DE MIGUEL
    /**
     * Identificación de usuario para uso del programa
     *
     * @return Devuelve el objeto Usuario que ha accedido correctamente al programa
     */
    public static Usuario identificaUsuario() {
        // TODO MIGUEL Controlar cuando devuelve un usuario vacío
        String dni;                                     // Usuario
        String clave;                                   // Clave
        boolean logeado = false, logeadosub = false;    // Estado login
        boolean hayUsuario = false;                     // Existencia del usuario
        boolean usuarioDisponible = false;              // Disponibilidad del usuario
        int contfall = 1;                               // Contador intentos fallidos de acceso

        Usuario objUsuario = new Usuario();

        // Petición usuario
        //   Reintenta con otro usuario si:
        //     No existe el usuario
        //     Usuario no disponible
        //     Usuario bloqueado por superar los 3 intentos fallidos de acceso
        //   Termina si:
        //     Ningún usuario introducido

        do {
            logeadosub = false;

            // Obtener usuario
            do {
                System.out.print(">>> Usuario: ");
                dni = introduceDatos.introduceString();

                if (dni.isEmpty()) {
                    System.out.println("[!] Debe introducir un código de usuario.");
                } else {
                    if (!UsuarioJDBC.existeUsuario(dni)) {
                        System.out.println("[!] No existe el usuario.");
                    } else {
                        if (!UsuarioJDBC.usuarioDisponible(dni)) {
                            System.out.println("[i] Este usuario está bloqueado, debe solicitar su desbloqueo.");
                        } else {
                            usuarioDisponible = true;
                        }
                        hayUsuario = true;
                    }
                }

            } while (!hayUsuario || !usuarioDisponible);
            // TODO MIGUEL Rol en existeUsuario no está bien, método sobrecargado
            // TODO MIGUEL Comprobar también disponibilidad
            objUsuario = UsuarioJDBC.obtenerUsuarioPorDni(dni);

            // Obtener contraseña
            do {
                System.out.print(">>> Contraseña: ");
                clave = introduceDatos.introduceString();

                if (objUsuario.getContrasenya().equals(clave)) {        // Clave correcta
                    // Usuario logeado correctamente
                    System.out.println("[i] Ha accedido correctamente.");
                    logeadosub = true;
                    logeado = true;
                } else {                                                // Clave incorrecta
                    System.out.println("[!] La contraseña es incorrecta.");
                    contfall++;
                }
                if (contfall == 4) {                                    // Demasiados intentos fallidos, aviso y bloqueo
                    UsuarioJDBC.bloquearUsuario(dni);
                    contfall = 1;
                    logeadosub = true;
                }
            } while (logeadosub == false);                              // Máximo 3 intentos
        } while (logeado == false);

        return objUsuario;
    }
}
